package main

import (
	"fmt"
)

type Item struct {
	id string
	price float64
	quantity int
}


type SpecialItem struct {
	Item // 匿名字段
	catalogId int
}

type LuxuryItem struct {
	Item //匿名字段
	markup float64
}

func (item *Item) Cost() float64 {
	return item.price * float64(item.quantity)
}

// 调用匿名字段的方法，嵌入匿名字段的方法
func (item *LuxuryItem) Cost() float64 {
	return item.Item.Cost() * item.markup
}

func main() {
	i := Item{"1", 12.5, 4}
	fmt.Printf("%.2f\n", i.Cost())

	si := SpecialItem{Item{"2", 10, 4}, 1}
	fmt.Println(si.id, si.price, si.quantity, si.catalogId)
	fmt.Println(si.Cost())

	li := LuxuryItem{Item{"blue", 30.00, 2}, 10}
	fmt.Println(li.Cost())
}

